package unipi.servlets;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import unipi.database.ErrorCodes;
import unipi.database.Rights;
import unipi.database.Tasks;
import unipi.helpers.HTMLPages;
import unipi.helpers.LoginCookie;
import unipi.helpers.Validator;

public class NewTask extends HttpServlet
{
	private static final long serialVersionUID = 1L;
	
	public NewTask()
	{
		super();
	}
	
	public void init() throws ServletException
	{
		
	
	}
	
	private String validateInputs(String title, String desc, String group, String hours, String startDate, String dueDate, String[] user)
	{
		if(!Validator.isValid(title) || !Validator.isValid(desc) || !Validator.isValid(group))
			return 	"Οι χαρακτήρες ', \" και & δεν επιτρέπονται στα πεδία εισόδου.";
		
		if(!Validator.isNumber(hours))
			return "Το πεδίο Απαιτούμενες Ώρες πρέπει να είναι αριθμός.";
		
		if(!Validator.isDate(startDate))
			return "Η ημερομηνία που εισάγατε στο πεδίο Ημερομηνία Έναρξης δεν είναι έγκυρη.";
		
		if(!Validator.isDate(dueDate))
			return "Η ημερομηνία που εισάγατε στο πεδίο Προθεσμία δεν είναι έγκυρη.";
		
		boolean users = true;
		for(String userID : user)
		{
			users = Validator.isValid(userID) && Validator.isNumber(userID);
			if(!users) break;			
		}
		if(!users)
			return "Οι επιλογές χρηστών που κάνατε δεν είναι έκγυρες.";
		
		return null;		
	}
	
	private String getPage(String uid, String message)
	{
		String usrddl = HTMLPages.getDropDownList(Rights.getUsers(uid, Rights.RightCols.TaskRights),
													"user", null, null, "multiple=\"multiple\" ");
		
		String content = "<h1>Ανάθεση Εργασίας</h1>" +
						HTMLPages.getSubmitForm("NewTask",
						new String[]{
						"Τίτλος",
						"Περιγραφή",
						"Ομάδα",
						"Απαιτούμενες Ώρες",
						"Ημερομηνία Έναρξης",
						"Προθεσμία",
						"Επιλογή εργαζομένου"},
						new String[]{
						"<input class=\"mediumInput\" name=\"title\" type=\"text\" value=\"\" />",
						"<textarea  class=\"txtarea\" name=\"desc\" rows=\"6\" cols=\"40\" ></textarea>",
						"<input class=\"mediumInput\" name=\"group\" type=\"text\" value=\"\" />",
						"<input class=\"mediumInput\" name=\"hours\" type=\"text\" value=\"\" />",
						"<input class=\"mediumInput\" name=\"startdate\" type=\"text\" value=\"\" />",
						"<input class=\"mediumInput\" name=\"duedate\" type=\"text\" value=\"\" />",
						"<div  class=\"multiple\">" + usrddl + "</div>"
						},"Αναθεση Εργασιας") + message;
		
		
		return HTMLPages.getGeneralPage(content, uid);	
	}
	
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
	{
		if(!LoginCookie.authCookie(request))
			response.sendRedirect("Login");
		else
		{
			String uid = LoginCookie.Get(request)[0];
			
			if(!Rights.hasTaskRights(uid))
				response.sendRedirect("Profile");
			else
			{	
				request.setCharacterEncoding("utf-8");
				String title = request.getParameter("title");
				String desc = request.getParameter("desc");
				String group = request.getParameter("group");
				String hours = request.getParameter("hours");
				String startDate = request.getParameter("startdate");
				String dueDate = request.getParameter("duedate");
				String[] user = request.getParameterValues("user");
				
				response.setContentType("text/html; charset=UTF-8");	
				PrintWriter out = response.getWriter();
								
				String validation = validateInputs(title, desc, group, hours, startDate, dueDate, user);
				
				if(validation == null)
				{					
					if(group.equals("")) group = null;
					
					ErrorCodes assign = Tasks.assignNew(title, desc, group, hours, startDate, dueDate, uid, user);	
					String message = "Η εργασία καταχωρήθηκε με επιτυχία";
					
					if(assign != ErrorCodes.OK)
					{
						message = "Παρουσιάστηκε πρόβλημα κατα την καταχώρηση της εργασίας.";
					}
					
					out.println(getPage(uid, message));
				}
				else
				{
					out.println(getPage(uid, validation));
				}
				
				out.close();	
			}
		}

	}
	
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
	{
		if(!LoginCookie.authCookie(request))
			response.sendRedirect("Login");
		else
		{
			String uid = LoginCookie.Get(request)[0];
			
			if(!Rights.hasTaskRights(uid))
				response.sendRedirect("Profile");
			else
			{			
				response.setContentType("text/html; charset=UTF-8");	
				PrintWriter out = response.getWriter();
				
				out.println(getPage(uid, ""));
				
				out.close();			
			}
		}
	}

}
